package Ptolemaiosz;

import java.util.ArrayList;

public class Level {

	private LevelPart[][] neighbour2DArray;
	private LevelPart currentLevelPart;
	private Application application;
	private LevelPart emptyLevelPart;
	private Avatar avatar;
	private int numberOfKeys;

    public Level() {
        	SkeletonLogger.logCall();
		SkeletonLogger.logReturn();
    }

	/**
	 * 
	 * @param levelPart
	 */
        
        public void setApplication(Application a)
            {
                application = a;
                SkeletonLogger.logCall();
		SkeletonLogger.logReturn();
            }
        
        public void setEmptyLevelPart(LevelPart l)
            {
                SkeletonLogger.logCall();
		emptyLevelPart = l;
					
		SkeletonLogger.logReturn();                
            }
        
	public void setCurrentLevelPart(LevelPart levelPart) {
		SkeletonLogger.logCall();
		
                //Ez a feltétel azért kell, hogy ha az initializer beallitja egyszer jol,
                //a buta skeleton ne allitsa vissza nullra (nyilvan egyenlore nullokkal dolgozik), mert exception lesz kesobb belole
                // A ptototipusnal ki kell venni, kulonben nem lesz jo...
                if(currentLevelPart == null)
			currentLevelPart = levelPart;
		
		SkeletonLogger.logReturn();
	}

	public LevelPart getCurrentLevelPart() {
		SkeletonLogger.logCall();
		
		
		SkeletonLogger.logReturn();
                return currentLevelPart;
	}

	public LevelPart[][] getneighbour2DArray() {
		SkeletonLogger.logCall();
		
		SkeletonLogger.logReturn();
                return neighbour2DArray;
	}

	/**
	 * 
	 * @param LevelPart
	 */
	public void setneighbour2DArray(LevelPart[][] array) {
		SkeletonLogger.logCall();
                
                neighbour2DArray = array;
		SkeletonLogger.logReturn();
	}

	public LevelPart getEmptyLevelPart() {
		SkeletonLogger.logCall();
		
		SkeletonLogger.logReturn();
                return emptyLevelPart;
	}

	public ArrayList<PhysicalEntity> getPhysicalEntities() {
		SkeletonLogger.logCall();
		
                //Letrehozunk egy ures tarolot az entitasoknak
                ArrayList<PhysicalEntity> physicalentities = new ArrayList<>();
                //Lekerjuk az elemeket a palyatol, ezekbol lehet kinyerni az elozoket (F. entitasokat)
                ArrayList<Element> elements = currentLevelPart.getElements();
	        
                //Minden egyes elementtol lekerjuk a fizikai entitasat, es azt el is taroljuk
                for(int i = 0;i < elements.size();i++)
                    {
                        physicalentities.add(elements.get(i).getPhysicalEntity());
                    }
		
                //Az avatart sem felejtjuk el, neki is van fizikai entitasa,  s mindig az aktualis palyaszakaszon szerepel
                physicalentities.add(avatar.getPhysicalEntity());
                
		SkeletonLogger.logReturn();
                //Visszaadjuk az osszegyujtott fizikai entitasokat
                return physicalentities;
	}

	public Avatar getAvatar() {
		
		
		SkeletonLogger.logCall();
		
		SkeletonLogger.logReturn();
		
		return this.avatar;
	}

	/**
	 * 
	 * @param avatar
	 */
	public void setAvatar(Avatar avatar) {
		SkeletonLogger.logCall();
		
		SkeletonLogger.logReturn();
		
		this.avatar = avatar;
	}

	/**
	 * 
	 * @param numberOfKeys
	 */
	public void setNumberOfKeys(int numberOfKeys) {
		SkeletonLogger.logCall();
		
		SkeletonLogger.logReturn();
		
		this.numberOfKeys = numberOfKeys;
	}

	public void keyFound() {
		SkeletonLogger.logCall();
		
			
		SkeletonLogger.logReturn();
	}

	public void checkLevelCompleted() {
		SkeletonLogger.logCall();
		
                        //Lekerdezzuk a szukseges allapotot
			if(SkeletonController.question("Az osszes kulcs fel lett szedve?"))
                            {
                                //Ha megfelelo cselekszunk
                                application.nextLevel();
                            }
		
		SkeletonLogger.logReturn();
	}

}